package com.qch.rabbitmq.demo;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @Author qch
 * @Date 2021/5/13
 */
public class HelloProducer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //获取连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置主机名
        factory.setHost("192.168.142.135");
        //设置虚拟主机名称， /在url中的转义字符 %2f
        factory.setVirtualHost("/");
        factory.setUsername("root");
        factory.setPassword("123456");
        factory.setPort(5672);

        //从factory获取连接，建立TCP连接，将连接放入线程池
        Connection connection = factory.newConnection();
        //获取通道
        Channel channel = connection.createChannel();
        /**
         * 声明消息队列
         * queue:队列名称
         * durable:是否持久化
         * exclusive:是否排他(不可和别人共享)
         * autoDelete:没有订阅也没有生产者往里放数据，自动删
         * 消息队列属性默认
         */
        channel.queueDeclare("queue.biz",false,false,true,null);
        /**
         * 声明交换机
         * exchange:交换机名称
         * 交换器类型
         *  durable:是否持久化
         *  autoDelete:没有订阅也没有生产者往里放数据，自动删
         *
         */
        channel.exchangeDeclare("ex.biz",BuiltinExchangeType.DIRECT,false,false,null);
        /**
         * 消息队列和交换机绑定,并指定路由键
         */
        channel.queueBind("queue.biz","ex.biz","hello.world");
        /**
         * 发送消息
         * 交换器的名字
         * 该消息的路由键
         *该消息的属性
         * 消息字节数组
         */
        channel.basicPublish("ex.biz","hello.world",null,"hello word 3".getBytes());
        channel.close();
        connection.close();
    }
}
